package service.article.interfaces;

import java.rmi.RemoteException;
import java.util.ArrayList;

import dbExceptions.BadComboException;
import dbExceptions.DataBaseErrorException;
import dbExceptions.MissingComboException;
import service.article.exceptions.ProxyException;
import article.entities.ArticleVO;
import article.entities.CategoryVO;
import article.entities.ComboVO;
import article.entities.IngredientVO;
import article.exceptions.BadArticleException;
import article.exceptions.BadCategoryException;
import article.exceptions.IncompleteArticleException;
import article.exceptions.MissingArticleException;
import article.exceptions.MissingCategoryException;
import article.exceptions.NotHereException;

public interface ArticleProxyMgt {

	void addArticle(ArticleVO artNew) throws IncompleteArticleException,
			ProxyException, RemoteException, MissingCategoryException,
			DataBaseErrorException, BadCategoryException,
			MissingArticleException;

	void updateArticle(ArticleVO artUpt) throws NotHereException,
			IncompleteArticleException, ProxyException, RemoteException,
			MissingCategoryException, DataBaseErrorException,
			BadCategoryException, MissingArticleException, BadArticleException;

	void deleteArticle(ArticleVO artDel) throws NotHereException,
			ProxyException, RemoteException, MissingArticleException,
			BadArticleException, DataBaseErrorException;

	ArticleVO[] getArticles() throws ProxyException, RemoteException;
	
	ArticleVO[] getAllArticles() throws ProxyException, RemoteException;

	IngredientVO[] stringToIngr(String str) throws ProxyException,
			RemoteException;

	IngredientVO[] getAllIngredients() throws ProxyException, RemoteException;

	IngredientVO[] getInStockIngredients() throws ProxyException,
			RemoteException;

	IngredientVO[] getOutStockIngredients() throws ProxyException,
			RemoteException;

	void addOutOfStock(ArrayList<IngredientVO> ingredientes)
			throws RemoteException, ProxyException;

	void addInStock(ArrayList<IngredientVO> ingredientes)
			throws RemoteException, ProxyException;

	void newIngredient(String name) throws ProxyException, RemoteException;

	CategoryVO[] getCategories() throws ProxyException, RemoteException;

	void newCategory(String name) throws ProxyException, RemoteException;

	void newCombo(ComboVO comb) throws MissingCategoryException,
			MissingComboException, BadCategoryException, RemoteException,
			ProxyException;

	void deleteCombo(ComboVO comb) throws MissingArticleException,
			BadArticleException, DataBaseErrorException, RemoteException,
			ProxyException;

	void updateCombo(ComboVO comb) throws MissingComboException,
			BadComboException, BadCategoryException, MissingCategoryException,
			DataBaseErrorException, RemoteException, ProxyException;
	
	ComboVO[] getCombos() throws RemoteException, ProxyException;

}
